﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DevExpress.XtraRichEdit;
using DevExpress.XtraRichEdit.API.Native;

namespace QL_Truong_Hoc.Export
{
    public partial class frmExportThongBaoNhapHoc : DevExpress.XtraEditors.XtraForm
    {

        //Data table đầu vào cần có những trường sau:
        //NgayHnay      'ngày hôm nay
        //ThangHnay     'tháng
        //NamHnay       'năm
        //DotHoc        'đợt học
        //NamHoc        'năm học
        //HoTen         'họ tên
        //QueQuan       'quê quán
        //NgayHoc       'ngày nhập học


        private string mcstrTemplate = Environment.CurrentDirectory + @"\Templates\Mau 03_Thong bao Nhap hoc.doc";


        public frmExportThongBaoNhapHoc()
        {
            InitializeComponent();
        }


        /// <summary>
        /// Thực hiện xuất ra file word.
        /// File template là file đã định sẵn.
        /// </summary>
        /// <param name="objData">Dữ liệu đưa vào file word</param>
        public bool fncExport(DataTable objData)
        {
            bool blnResult = false;

            try
            {
                //get data
                RichEditDocumentServer objWord = new RichEditDocumentServer();
                objWord.LoadDocument(mcstrTemplate);
                
                objWord.Options.MailMerge.DataSource = objData;
                objWord.Options.MailMerge.ViewMergedData = true;
                objWord.MailMerge(docThongBaoNhapHoc.Document);

                //xExport(objWord, objData, false);

                return true;
            }
            catch (Exception ex) { clsCommon.fncMsgError(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name, System.Reflection.MethodBase.GetCurrentMethod().ToString(), ex.Message); }
            finally { }
            return blnResult;
        }


        /// <summary>
        /// Thực hiện merge
        /// </summary>
        /// <param name="objWordControl">Control word</param>
        /// <param name="objData">Dữ liệu đầu vào</param>
        /// <param name="blnShowMergedData">Có hiện dữ liệu đã xuất ngay trên control không?</param>
        /// <returns></returns>
        public bool fncExport(RichEditControl objWordControl, DataTable objData, bool blnShowMergedData = false)
        {
            bool blnResult = false;

            try
            {
                //get data
                xExport(objWordControl, objData, blnShowMergedData);

                return true;
            }
            catch (Exception ex) { clsCommon.fncMsgError(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name, System.Reflection.MethodBase.GetCurrentMethod().ToString(), ex.Message); }
            finally { }
            return blnResult;
        }


        /// <summary>
        /// Phương thức cơ sở thực hiện mail merge
        /// </summary>
        /// <param name="objWordControl">control word</param>
        /// <param name="objData">dữ liệu vào</param>
        /// <param name="blnShowMergedData">có xem kết quả không?</param>
        /// <returns></returns>
        private bool xExport(RichEditControl objWordControl, DataTable objData, bool blnShowMergedData = false)
        {
            bool blnResult = false;

            try
            {
                if (objData == null) return false;

                if (!System.IO.File.Exists(mcstrTemplate))
                {
                    clsCommon.fncMsgWarning("Không tìm thấy tệp tin mẫu.");
                    return false;
                }

                MailMergeOptions objMergeOptions = objWordControl.Document.CreateMailMergeOptions();
                objMergeOptions.DataSource = objData;
                objMergeOptions.MergeMode = MergeMode.NewSection;

                //get data
                //objWordControl.LoadDocumentTemplate(mcstrTemplate);
                //objWordControl.Options.MailMerge.DataSource = objData;
                objWordControl.Options.MailMerge.ViewMergedData = blnShowMergedData;

                //file to save
                SaveFileDialog dlgSave = new SaveFileDialog();
                dlgSave.Filter = "Documents (*.doc)|*.doc|All files (*.*)|*.*";
                dlgSave.FilterIndex = 1;
                dlgSave.RestoreDirectory = true;

                if (dlgSave.ShowDialog() != DialogResult.OK) return false;

                //export word
                objWordControl.MailMerge(objMergeOptions, dlgSave.FileName, DocumentFormat.Doc);
                //objWordControl.MailMerge(objMergeOptions, docThongBaoNhapHoc.Document);

                return true;
            }
            catch (Exception ex) { clsCommon.fncMsgError(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name, System.Reflection.MethodBase.GetCurrentMethod().ToString(), ex.Message); }
            finally { }
            return blnResult;
        }
    }
}